package queue;

public class Queue {
    Node head,last;
    int size;
    // 双向链表节点
    private static class Node{
        int val;
        Node prev;
        Node next;

        public Node(int val) {
            this.val = val;
        }
    }

    public void offer(int e){
        Node node=new Node(e);
        if(isEmpty()){
            head=last=node;
        }else{
            last.next=node;
            node.prev=last;
            last=last.next;
        }
        size++;
    }
    // 出队列---将双向链表第一个节点删除掉
    public int poll(){
// 1. 队列为空
// 2. 队列中只有一个元素----链表中只有一个节点---直接删除
// 3. 队列中有多个元素---链表中有多个节点----将第一个节点删除
        if(isEmpty()){
            return -1;
        }else if(head.next==null){
            int tmp = head.val;
            head=last=null;
            size=0;
            return tmp;
        }else{
            int tmp = head.val;
            head=head.next;
            head.prev=null;
            size--;
            return tmp;
        }
    }
    // 获取队头元素---获取链表中第一个节点的值域
    public int peek(){
        if(isEmpty()){
            return -1;
        }
        return head.val;
    }
    public int size() {
        return size;
    }
    public boolean isEmpty(){
        return size==0;
    }
}

